package org.demo.base.exception;

import lombok.extern.slf4j.Slf4j;
import org.demo.base.mvc.HttpResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;

/**
 * 全局异常处理
 * 对Controller做增强，也是基于AOP的。在这里进行全局异常处理
 * @author tomdog
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 这个方法，处理未登录异常
     * 为了统一返回结果，出现异常之后也要返回HttpResult
     */
    @ExceptionHandler(CustomException.class)
    public HttpResult handleNotLoginException(CustomException e, HttpServletRequest request) {
        log.error(e.getMessage());
        return HttpResult.error(e.getCode(), e.getMessage());
    }

    /**
     * 其他异常也应该处理一下，全都是Exception的后代
     */
    @ExceptionHandler(Exception.class)
    public HttpResult handleException(Exception e, HttpServletRequest request) {
        // 这里打印异常堆栈，方便控制台查看错误信息
        e.printStackTrace();
        log.error(e.getMessage());
        // 其他异常，code默认500
        return HttpResult.error(500, e.getMessage());
    }
}
